﻿define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {

    var Controller = {
        index: function () {
            // 引入通用的城市学校过滤功能
            var script = document.createElement('script');
            script.src = '/assets/js/backend/common/index.js';
            document.head.appendChild(script);

            // 获取当前的group_id
            var groupId = Config.groupId || 1;

            // 根据group_id动态设置操作链接
            var tableConfig = {
                extend: {
                    index_url: 'user/studentmanager/index',
                    multi_url: 'user/studentmanager/multi',
                    table: 'user',
                }
            };

            // 如果是教学点管理员选项卡，使用auth/admin的操作链接
            if (groupId == '4') {
                tableConfig.extend.add_url = 'auth/admin/add';
                tableConfig.extend.edit_url = 'auth/admin/edit';
                tableConfig.extend.del_url = 'auth/admin/del';
            } else {
                // 其他选项卡使用原来的链接
                tableConfig.extend.add_url = 'user/studentmanager/add';
                tableConfig.extend.edit_url = 'user/studentmanager/edit';
                tableConfig.extend.del_url = 'user/studentmanager/del';
            }

            // 初始化表格参数配置
            Table.api.init(tableConfig);

            var table = $("#table");

            // 动态构建列配置
            var columns = [
                { field: 'state', checkbox: true },
                { field: 'id', title: 'ID', operate: false },
                { field: 'city_id', title: '城市', sortable: true },
                { field: 'school_id', title: '学校', sortable: true },
                { field: 'username', title: '用户名', operate: 'LIKE' },
                { field: 'nickname', title: '昵称', operate: 'LIKE' },
                { field: 'email', title: '邮箱', operate: 'LIKE' },
                { field: 'mobile', title: '手机号', operate: 'LIKE' }
            ];

            // 如果是group_id=2，在mobile列后添加查看老师评价列
            if (groupId == '2') {
                columns.push({
                    field: 'teacher_evaluation',
                    title: '老师评价',
                    operate: false,
                    formatter: function (value, row) {
                        return '<a href="javascript:;" class="btn btn-xs btn-info btn-view-evaluation" data-id="' + row.id + '">查看评价</a>';
                    }
                });
            }

            // 添加其他列
            columns.push(
                { field: 'createtime', title: '创建时间', operate: 'RANGE', addclass: 'datetimerange', formatter: Table.api.formatter.datetime },
                {
                    field: 'status', title: '状态', operate: false, formatter: function (value, row) {
                        // 三联按钮状态切换
                        var html = '<div class="btn-group status-toggle-group" data-id="' + row.id + '">';

                        // 未处理按钮
                        var pendingClass = (value == '0' || value == 'hidden') ? 'btn-warning active' : 'btn-default';
                        html += '<button type="button" class="btn btn-xs ' + pendingClass + ' btn-status-change" data-status="0" data-id="' + row.id + '">未处理</button>';

                        // 审核通过按钮
                        var normalClass = (value == 'normal' || value == '1') ? 'btn-success active' : 'btn-default';
                        html += '<button type="button" class="btn btn-xs ' + normalClass + ' btn-status-change" data-status="normal" data-id="' + row.id + '">审核通过</button>';

                        // 审核不通过按钮
                        var rejectClass = (value == '-1') ? 'btn-danger active' : 'btn-default';
                        html += '<button type="button" class="btn btn-xs ' + rejectClass + ' btn-status-change" data-status="-1" data-id="' + row.id + '">审核不通过</button>';

                        html += '</div>';
                        return html;
                    },
                    custom: { '0': 'warning', 'normal': 'success', '-1': 'danger' }
                },
                { field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate }
            );

            // 初始化表格
            table.bootstrapTable({
                url: $.fn.bootstrapTable.defaults.extend.index_url,
                pk: 'id',
                sortName: 'id',
                columns: [columns],
                queryParams: function (params) {
                    // 添加group_id参数到查询条件，确保在POST和GET请求中都能正确传递
                    // 修改为从Config中获取groupId值
                    var groupId = Config.groupId || '1'; // 默认显示学生列表
                    params.group_id = groupId;
                    return params;
                }
            });

            // 为表格绑定事件
            Table.api.bindevent(table);

            // 添加导出Excel按钮
            Controller.addExportButton(table);

            // 设置导出按钮拦截器
            Controller.setupExportInterceptor(table);

            // 绑定教学点管理员的新建按钮事件
            $(document).on('click', '.btn-add-admin', function () {
                Fast.api.open('auth/admin/add', '新建教学点管理员', {
                    area: ['90%', '90%'],
                    callback: function () {
                        // 新建成功后刷新表格
                        table.bootstrapTable('refresh');
                    }
                });
            });

            // 绑定查看老师评价按钮事件
            $(document).on('click', '.btn-view-evaluation', function () {
                var userId = $(this).data('id');
                Fast.api.open('user/teacherevaluation/index?teacher_id=' + userId, '查看老师评价', {
                    area: ['90%', '90%']
                });
            });


            // 监听选项卡点击事件，将城市学校筛选框移动到当前选项卡的toolbar中
            $('.nav-tabs a').on('click', function (e) {
                e.preventDefault();
                var target = $(this).attr('href');
                window.location.href = target;
            });

            // 绑定三联按钮状态修改事件
            $(document).on('click', '.btn-status-change', function () {
                var $this = $(this);
                var status = $this.data('status');
                var userId = $this.data('id');
                var text = $this.text();

                // 如果按钮已经是激活状态，则不执行操作
                if ($this.hasClass('active')) {
                    return;
                }

                Layer.confirm('确定要将该用户状态修改为"' + text + '"吗?', { icon: 3, title: '提示' }, function (index) {
                    // 使用原生jQuery Ajax来避免Fast.api.ajax的自动刷新限制
                    $.ajax({
                        url: 'user/studentmanager/changeStatus',
                        type: 'POST',
                        dataType: 'json',
                        data: { ids: userId, status: status, group_id: Config.groupId },
                        success: function (ret) {
                            Layer.close(index);
                            if (ret.code === 1) {
                                // 显示成功消息
                                Toastr.success(ret.msg || '操作成功');

                                // 更新当前行的按钮状态
                                var $group = $this.closest('.status-toggle-group');
                                $group.find('.btn').removeClass('active btn-success btn-warning btn-danger').addClass('btn-default');

                                // 设置当前按钮为激活状态并添加对应颜色
                                if (status == 'normal' || status == '1') {
                                    $this.removeClass('btn-default').addClass('btn-success active');
                                } else if (status == '-1') {
                                    $this.removeClass('btn-default').addClass('btn-danger active');
                                } else {
                                    $this.removeClass('btn-default').addClass('btn-warning active');
                                }
                                table.bootstrapTable('refresh');
                            } else {
                                Toastr.error(ret.msg || '操作失败');
                            }
                        },
                        error: function (xhr, status, error) {
                            Layer.close(index);
                            Toastr.error('请求失败: ' + error);
                        }
                    });
                });
            });
        },

        add: function () {
            var script = document.createElement('script');
            script.src = '/assets/js/backend/common/add.js?';
            document.head.appendChild(script);
            Controller.api.bindevent();
        },

        edit: function () {
            var script = document.createElement('script');
            script.src = '/assets/js/backend/common/add.js?';
            document.head.appendChild(script);
            Controller.api.bindevent();
        },

        // 设置导出按钮拦截器（简化版）
        setupExportInterceptor: function (table) {
            // 方法1: 直接绑定已知的导出按钮选择器
            var exportSelectors = [
                '.btn.btn-info.btn-export',
                '.btn-export',
                'button[class*="export"]',
                'a[class*="export"]'
            ];

            exportSelectors.forEach(function (selector) {
                $(document).off('click', selector).on('click', selector, function (e) {
                    e.preventDefault();
                    e.stopPropagation();

                    Controller.frontendExport(table);
                    return false;
                });
            });

            // 方法2: 全局事件委托，拦截所有可能的导出按钮
            $(document).off('click.export-global').on('click.export-global', 'button, a, input[type="button"]', function (e) {
                var $btn = $(this);
                var text = $btn.text() || $btn.val() || $btn.attr('title') || '';
                var className = $btn.attr('class') || '';

                // 检查是否是导出按钮
                if (text.indexOf('导出') !== -1 ||
                    text.indexOf('导入') !== -1 ||
                    text.indexOf('export') !== -1 ||
                    text.indexOf('Export') !== -1 ||
                    className.indexOf('export') !== -1) {
                    e.preventDefault();
                    e.stopPropagation();
                    Controller.frontendExport(table);
                    return false;
                }
            });

            // 方法3: 延迟处理，替换现有按钮功能
            setTimeout(function () {
                $('button, a').each(function () {
                    var $btn = $(this);
                    var text = $btn.text() || $btn.attr('title') || '';
                    var className = $btn.attr('class') || '';

                    if (text.indexOf('导出') !== -1 ||
                        text.indexOf('导入') !== -1 ||
                        text.indexOf('export') !== -1 ||
                        className.indexOf('export') !== -1) {
                        // 移除原有事件，添加新事件
                        $btn.off('click.original').on('click.frontend', function (e) {
                            e.preventDefault();
                            e.stopPropagation();
                            Controller.frontendExport(table);
                            return false;
                        });
                    }
                });
            }, 500);
        },

        // 添加导出Excel按钮到工具栏
        addExportButton: function (table) {
            // 等待表格完全初始化后再添加按钮
            setTimeout(function () {
                // 查找表格工具栏的多个可能位置
                var toolbar = $('.fixed-table-toolbar .columns-right');
                if (toolbar.length === 0) {
                    toolbar = $('.fixed-table-toolbar .pull-right');
                }
                if (toolbar.length === 0) {
                    toolbar = $('.fixed-table-toolbar .btn-group');
                }
                if (toolbar.length === 0) {
                    toolbar = $('.fixed-table-toolbar');
                }

                // 检查按钮是否已存在，避免重复添加
                if ($('.btn-export-excel').length === 0) {
                    var exportBtn = '<button class="btn btn-success btn-export-excel" type="button" title="导出Excel" style="margin-left: 5px;">' +
                        '<i class="fa fa-download"></i> 导出数据</button>';

                    if (toolbar.length > 0) {
                        toolbar.append(exportBtn);
                    } else {
                        // 如果找不到工具栏，直接添加到表格容器上方
                        $('#table').before('<div class="export-toolbar" style="margin-bottom: 10px;">' + exportBtn + '</div>');
                    }
                }
            }, 500);

            // 绑定导出按钮事件 - 使用事件委托确保动态添加的按钮也能响应
            $(document).off('click', '.btn-export-excel').on('click', '.btn-export-excel', function () {
                Controller.frontendExport(table);
            });
        },

        // 前端导出方案
        frontendExport: function (table) {
            // 获取选中的城市和学校信息
            var citySelect = $('#c-cityarea_id');
            var schoolSelect = $('#c-school_id');
            var cityText = citySelect.length > 0 ? (citySelect.find('option:selected').text() || '全部城市') : '全部城市';
            var schoolText = schoolSelect.length > 0 ? (schoolSelect.find('option:selected').text() || '全部学校') : '全部学校';
            // 获取表格数据
            var tableData = table.bootstrapTable('getData');
            if (tableData.length === 0) {
                Toastr.warning('没有数据可导出');
                return;
            }

            // 显示导出格式选择
            Layer.confirm('请选择导出格式：', {
                btn: ['Excel格式', 'CSV格式', '取消'],
                btn1: function (index) {
                    Layer.close(index);
                    Controller.exportToExcel(tableData, cityText, schoolText);
                },
                btn2: function (index) {
                    Layer.close(index);
                    Controller.exportToCSV(tableData, cityText, schoolText);
                },
                btn3: function (index) {
                    Layer.close(index);
                }
            });
        },

        // 导出为Excel格式
        exportToExcel: function (tableData, cityText, schoolText) {
            // 尝试加载XLSX库
            if (window.XLSX) {
                Controller.doExcelExport(tableData, cityText, schoolText);
                return;
            }

            // 显示加载提示
            var loadingIndex = Layer.load(1, { shade: [0.3, '#000'] });

            // 设置超时
            var timeout = setTimeout(function () {
                Layer.close(loadingIndex);
                Toastr.error('Excel库加载超时，将使用CSV格式导出');
                Controller.exportToCSV(tableData, cityText, schoolText);
            }, 8000);

            // 动态加载XLSX库
            var script = document.createElement('script');
            script.onload = function () {
                clearTimeout(timeout);
                Layer.close(loadingIndex);
                Controller.doExcelExport(tableData, cityText, schoolText);
            };
            script.onerror = function () {
                clearTimeout(timeout);
                Layer.close(loadingIndex);
                Controller.exportToCSV(tableData, cityText, schoolText);
            };

            // 使用可靠的CDN
            script.src = 'https://cdn.jsdelivr.net/npm/xlsx@0.18.5/dist/xlsx.full.min.js';
            document.head.appendChild(script);
        },

        // 执行Excel导出
        doExcelExport: function (tableData, cityText, schoolText) {
            try {
                // 准备Excel数据
                var excelData = [];

                // 添加表头
                excelData.push(['城市', '学校', '用户名', '昵称', '邮箱', '手机号', '状态', '创建时间']);

                // 添加数据行
                tableData.forEach(function (row) {
                    excelData.push([
                        row.city_id || '',
                        row.school_id || row.school_name || '',
                        row.username || '',
                        row.nickname || '',
                        row.email || '',
                        row.mobile || '',
                        row.status_text || '',
                        row.join_time_text || ''
                    ]);
                });

                // 创建工作簿
                var wb = XLSX.utils.book_new();
                var ws = XLSX.utils.aoa_to_sheet(excelData);

                // 设置列宽
                ws['!cols'] = [
                    { wch: 15 }, // 城市
                    { wch: 20 }, // 学校
                    { wch: 15 }, // 用户名
                    { wch: 15 }, // 昵称
                    { wch: 25 }, // 邮箱
                    { wch: 15 }, // 手机号
                    { wch: 10 }, // 状态
                    { wch: 20 }  // 创建时间
                ];

                // 添加工作表到工作簿
                XLSX.utils.book_append_sheet(wb, ws, "学员数据");

                // 生成文件名
                var timestamp = new Date().toISOString().slice(0, 19).replace(/:/g, '-');
                var filename = cityText + schoolText + '学员数据_' + timestamp + '.xlsx';

                // 下载文件
                XLSX.writeFile(wb, filename);

                Toastr.success('Excel文件已生成并开始下载');

            } catch (error) {
                Toastr.warning('Excel导出失败，将使用CSV格式');
                Controller.exportToCSV(tableData, cityText, schoolText);
            }
        },

        // CSV格式导出
        exportToCSV: function (tableData, cityText, schoolText) {
            try {
                // 构建CSV内容
                var csvContent = "城市,学校,用户名,昵称,邮箱,手机号,状态,创建时间\n";

                tableData.forEach(function (row) {
                    var line = [
                        row.city_id || '',
                        row.school_id || row.school_name || '',
                        row.username || '',
                        row.nickname || '',
                        row.email || '',
                        row.mobile || '',
                        row.status_text || '',
                        row.join_time_text || ''
                    ].map(function (field) {
                        // 处理字段中的特殊字符
                        var cleanField = String(field).replace(/"/g, '""').replace(/\n/g, ' ').replace(/\r/g, '');
                        return '"' + cleanField + '"';
                    }).join(',');
                    csvContent += line + '\n';
                });

                // 添加BOM以支持中文
                var BOM = '\uFEFF';
                var blob = new Blob([BOM + csvContent], { type: 'text/csv;charset=utf-8;' });

                // 生成文件名
                var timestamp = new Date().toISOString().slice(0, 19).replace(/:/g, '-');
                var filename = cityText + schoolText + '学员数据_' + timestamp + '.csv';

                // 创建下载链接
                var link = document.createElement('a');
                if (link.download !== undefined) {
                    var url = URL.createObjectURL(blob);
                    link.setAttribute('href', url);
                    link.setAttribute('download', filename);
                    link.style.visibility = 'hidden';
                    document.body.appendChild(link);
                    link.click();

                    // 清理
                    setTimeout(function () {
                        document.body.removeChild(link);
                        URL.revokeObjectURL(url);
                    }, 100);

                    Toastr.success('CSV文件已生成并开始下载');
                } else {
                    throw new Error('浏览器不支持文件下载功能');
                }
            } catch (error) {
                Toastr.error('CSV导出失败: ' + error.message);
            }
        },

        api: {
            bindevent: function () {
                Form.api.bindevent($("form[role=form]"));
            }
        }
    };
    return Controller;
});